package com.gcb.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gcb.common.core.domain.entity.GcbUser;
import com.gcb.domain.dto.*;
import com.gcb.domain.vo.*;
import com.gcb.domain.vo.company.ComInfoVO;

import java.util.List;

/**
 * 工船宝用户信息Service接口
 *
 * @author seh
 * @date 2024-03-08
 */
public interface IGcbUserService extends IService<GcbUser> {
    /**
     * 查询工船宝用户信息
     *
     * @param id 工船宝用户信息主键
     * @return 工船宝用户信息
     */
    GcbUser selectGcbUserById(Long id);

    /**
     * 查询工船宝用户信息列表
     *
     * @param dto 工船宝用户信息
     * @return 工船宝用户信息集合
     */
    List<GcbUserVO> selectGcbUserList(GcbUserQueryDTO dto);

    /**
     * 修改工船宝用户信息
     *
     * @param gcbUser 工船宝用户信息
     * @return 结果
     */
    int updateGcbUser(GcbUser gcbUser);

    /**
     * 根据手机号码查询用户信息
     *
     * @param mobile 手机号码
     * @return 用户信息
     */
    GcbUser getByMobile(String mobile);

    /**
     * 修改用户密码
     *
     * @param user 用户信息
     * @return 结果
     */
    int updatePassword(GcbUserUpdatePasswordDTO user);

    /**
     * 忘记密码
     *
     * @param dto
     * @return
     */
    int forgetPwd(GcbUserForgetPasswordDTO dto);

    /**
     * 校验验证码
     *
     * @param mobile     手机号
     * @param verifyCode 验证码
     * @return Boolean
     */
    void checkVerifyCode(String mobile, String verifyCode);

    /**
     * 修改用户身份标签
     *
     * @param userId      用户id
     * @param identityTag 标签
     */
    Boolean identity(Long userId, String identityTag);

    /**
     * 用户注册
     *
     * @param userRegisterDTO
     */
    String register(UserRegisterDTO userRegisterDTO);


    /**
     * 修改用户状态
     */
    void updateStatus(GcbUserSaveDTO dto);

    GcbUserVO getDetail(Long id);

    /**
     * 获取用户信息
     *
     * @param userId 用户id
     * @return GcbUserInfoVo 用户信息vo
     */
    GcbUserInfoVO userInfo(Long userId);

    /**
     * 修改用户手机号
     *
     * @param userId 用户id
     * @param mobile 手机号码
     * @return
     */
    Boolean updateMobileByUserId(Long userId, String mobile);

    /**
     * 更新用户信息
     *
     * @param userId 用户id
     * @param user   用户信息
     */
    void updateUserInfo(Long userId, GcbUser user);

    /**
     * 获取用户数据库中的手机号
     *
     * @param userId 用户id
     */
    String oldMobileNumber(Long userId);

    /**
     * 注册用户设置新密码
     *
     * @param userPwdDTO 用户密码对象
     * @return boolean
     */
    Boolean registerPassword(GcbUserUpdatePasswordDTO userPwdDTO);

}
